package com.gjy.design.responsibility.d1;

import java.util.Arrays;
import java.util.List;
import java.util.function.Predicate;

/**
 * @author gjy
 * @version 1.0
 * @since 2025-11-11 11:14:56
 */
public class StreamChainOfResponsibility {

    public static void main(String[] args) {
        // 定义处理条件作为Predicate
        List<Predicate<String>> handlers = Arrays.asList(
                request -> request.equals("A"),
                request -> request.equals("B")
        );

        // 定义处理逻辑映射
        List<String> results = Arrays.asList(
                "处理者1处理",
                "处理者2处理"
        );

        String request = "A";
        // 使用Stream处理：找到第一个匹配的条件并返回结果
        String result = handlers.stream()
                .filter(predicate -> predicate.test(request)) // 过滤匹配的条件
                .map(predicate -> results.get(handlers.indexOf(predicate))) // 映射到结果
                .findFirst() // 找到第一个
                .orElse("无处理者处理"); // 如果没有匹配，返回默认结果

        System.out.println("处理结果: " + result);

        // 测试不同请求
        String resultB = "B".equals(request) ? "处理者2处理" : "无处理者处理"; // 简单示例，但用Stream更优雅
        // 实际上，对于更复杂的链，Stream可以更灵活，但上述方式模拟了责任链
    }

}
